![]() グラフィックス処理の命令レイテンシ減少のためのシステムおよび方法
专利摘要:
コンパイラ(例えばシェーダ・コンパイラ)の命令スケジューラが、依存する先行命令と後続命令との間の割り出された命令距離に基づいて命令レイテンシを減じる、システム、方法、および装置が開示される。 A 公开号:JP2011514592A 申请号:JP2010547825 申请日:2009-02-20 公开日:2011-05-06 发明作者:チェン、リン 申请人:クゥアルコム・インコーポレイテッドQualcomm Incorporated; IPC主号:G06T15-00
专利说明:
[0001] この開示は、グラフィックス処理において使用されるプログラム・コード中の命令レイテンシを減少すること、特にグラフィックス処理において使用されるシェーダ中の命令レイテンシを減少することに関する。] 背景技術 [0002] グラフィックス処理ユニット(GPU)は、ディスプレイ装置上で表示するためのコンピュータ化されたグラフィックスを生成するために使用される専用のグラフィックス・レンダリング装置である。GPUは、典型的には、汎用中央処理装置(CPU)と共に使用されてグラフィック・イメージ・データ(例えば3次元のコンピュータ化されたグラフィック・イメージ・データ)を処理する。そのような場合、GPUは、多くのプリミティブ・グラフィックス(primitive graphics)演算を実行して、ディスプレイ装置上で表示するための3次元画像を、CPUを使用してディスプレイ装置上で表示するための画像を描くよりも速く作成することが可能である。典型的には、GPUは、ハードウェア中のいくつかの複雑なアルゴリズムを実行するハードウェアを含んでいる。] [0003] 例えば、典型的なGPUは画像ジオメトリ(geometry)を受け取り、パイプライン・アプローチを使用して、例えばディスプレイ装置上での表示に向けて出力されることが可能なグラフィックスを出力する。典型的なグラフィックス・パイプラインは、多くのステージを含んでおり、これらのステージは、パイプライン中で別のステージで恐らく使用されている最中のあるステージからの出力と並列で動作する。例えば、典型的なグラフィックス・パイプラインは、頂点シェーダ、プリミティブ・アセンブリ、ビューポート変換、プリミティブ設定、ラスタ化、隠れた(hidden)プリミティブおよびピクセル除去、属性設定、属性補間(attribute interpolation)、およびフラグメント(断片)・シェーダのステージを具備する。] [0004] 頂点シェーダは画像のための画像ジオメトリに適用され、画像ジオメトリ中の頂点座標および頂点の属性を生成する。頂点属性は、例えば、1つの頂点と関連する色、法線、およびテクスチャ座標を含んでいる。プリミティブ・アセンブリは、画像ジオメトリに基づいて、頂点から、プリミティブ(primitive、基本要素)(例えば点プリミティブ、線プリミティブ、三角形プリミティブ)を形成する。形成されたプリミティブは、変換(例えば標準化された装置空間からスクリーン空間へプリミティブを変形するビューポート変換)を使用して、ある空間から別の空間へ変形されることが可能である。プリミティブ設定が使用されて、プリミティブの面積(area)およびエッジ係数を割り出し、またオクルジョン・カリング(例えば(背面カリング)および3Dクリップ動作を行なうことが可能である。] [0005] ラスタ化は、プリミティブをプリミティブ中の頂点のXY座標およびプリミティブに含まれているピクセルの数に基づいてピクセルへと変換する。隠れたプリミティブおよびピクセル除去は、プリミティブおよび/またはピクセルのz座標を使用して、隠れていると判定されたプリミティブおよびピクセル(例えば画像フレーム中の別のプリミティブまたはピクセルの後ろに位置するプリミティブまたはピクセル、透明なプリミティブまたはピクセル)を特定するとともに除去する。属性設定は、プリミティブ中のピクセルと関連する属性についての属性勾配(attribution gradient)(例えば水平(X)方向または垂直(Y)方向のいずれかにおいて動いているプリミティブ中の第1ピクセルの属性値と第2ピクセルの属性値との間の差分)を割り出す。属性補間は、割り出された属性勾配値に基づいてプリミティブ中のピクセル上の属性を補間する。補間された属性値は、ピクセル・レンダリングのためにフラグメント・シェーダに送られる。フラグメント・シェーダの結果は、処理された画像をディスプレイ装置上で表示するために、後処理ブロックおよびフレーム・バッファに出力されることが可能である。] [0006] シェーダ(例えば頂点シェーダ、フラグメント・シェーダ)は、典型的には、グラフィックス・システムまたは他のマルチメディア・システムの中で使用され、プリミティブ(例えば頂点、ピクセル)の属性を算出および制御するコンピュータ・プログラムである。シェーダは、例えば、高水準プログラミング言語または低水準プログラミング言語のようなプログラミング言語で典型的に書かれている。高水準プログラミング言語はC++プログラミング言語、などであり得る。アセンブリ言語は低水準言語の例である。] [0007] シェーダ・コンパイラは、高水準言語または低水準言語で書かれたシェーダ・プログラム・コードを機械レベル言語へ変換する変換器として働く。シェーダが高水準言語で書かれている場合、変換器は、シェーダ・プログラム・コードを、これが書かれている高水準言語から低水準言語に変換し、次いで低水準シェーダ・プログラム・コードを機械レベル命令に変換する。シェーダ・コンパイラの命令スケジューラは、シェーダの実行を早めるために、シェーダの機械語命令を並べ替える。また、シェーダ・コンパイラは、ダミー命令(例えば演算無しまたはNOP)を挿入することによってハードウェアの時間制約に対処して、シェーダを、これを実行するハードウェアのタイミング制約に一致させる。] [0008] ハードウェア制約を考慮に入れながらシェーダの命令を最適化することが可能であることは、有益であろう。] [0009] 本開示は、本技術分野における欠点を対処し、かつ命令のスケジューリングを最適化してグラフィックス処理パイプラインの少なくとも一部(例えば頂点シェーダおよび/またはフラグメント・シェーダのようなシェーダ)を実行するのに使用される1つ以上の方法、装置、およびコンピュータ可読媒体を提供することを目指している。] [0010] 1つ以上の実施形態に従って、複数のグラフィックス処理命令のうちの2つの命令の間の依存が特定される。2つの命令のうちの一方は先行命令を具備し、2つの命令のうちのもう一方は後続命令を具備する。先行命令と後続命令との間の依存と関連する初期エッジ・レイテンシが割り出される。先行命令および後続命令に対応する命令距離が割り出され、これが使用されて初期エッジ・レイテンシを割り出された命令距離の分減じて先行命令と後続命令との間の依存と関連する減じられたエッジ・レイテンシを割り出す。複数のグラフィックス処理命令は、シェーダ(例えば頂点シェーダまたはフラグメント・シェーダ)を実行することが可能である。] [0011] 1つ以上の実施形態に従って、初期エッジ・レイテンシを割り出された命令距離の分減じることによって割り出された減じられたエッジ・レイテンシが使用されて後続命令の実行をスケジューリングする。1つ以上の実施形態に従って、後続命令の実行を開始する前に実行される予定の複数の同期用命令(例えば、独立したシェーダ命令またはNOP)の数が割り出されて、後続命令の実行を先行命令と同期させる。] [0012] 1つ以上の実施形態に従って、初期エッジ・レイテンシは先行命令と関連するハードウェア・レイテンシであり、また/または先行命令と後続命令との間の依存は、先行命令のデスティネーションが後続命令のソースであるというフロー依存を具備する。] [0013] 1つ以上の実施形態に従って、複数のグラフィックス処理命令のうちの2つの命令の間の依存が特定される。2つの命令のうちの一方は先行命令を具備し、2つの命令のうちのもう一方は後続命令を具備する。先行命令と後続命令との間の依存と関連する初期エッジ・レイテンシが割り出される。先行命令および後続命令に対応する命令距離が割り出され、これが使用されて初期エッジ・レイテンシを割り出された命令距離の分減じて先行命令と後続命令との間の依存と関連する減じられたエッジ・レイテンシを割り出す。命令距離は、先行命令のデスティネーション・オペランドに相当する後続命令の各ソース・オペランドについてのマスク距離を割り出すことと、複数の割り出されたマスク距離のうちの最小のマスク距離を命令距離として選択することと、によって割り出される。] [0014] 1つ以上の実施形態に従って、後続命令のソース・オペランドに関連しかつ命令距離を割り出すのに使用されるマスク距離は、先行命令のデスティネーション・オペランドについての成分マスク、および後続命令のソース・オペランドについての成分マスクを割り出すことと、デスティネーション・オペランドの成分マスクおよびソース・オペランドの成分マスクを連結することによって、成分ストリングを生成することと、成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことと、複数の割り出された成分距離のうちの最小の成分距離をソース・オペランドについてのマスク距離と特定することと、によって割り出される。] [0015] 1つ以上の実施形態に従って、成分の組の中の各成分と関連する成分距離は、成分ストリングを検査して成分ストリングの中の成分の第1の発生の位置を特定することと、成分の第1の発生が特定された場合、成分ストリングを検査して成分ストリングの中の成分の第2の発生の位置を特定することであって、第2の発生は成分ストリングの中の第1の発生の後である、特定することと、成分の第2の発生の位置が特定された場合、成分ストリング中の成分の第1の発生と第2発生との間の成分の数を割り出すことと、成分についての成分距離を割り出された成分の数に設定することと、によって割り出される。] [0016] 1つ以上の実施形態に従って、複数のグラフィックス処理命令は頂点シェーダを実行し、成分の組はX、Y、Z、およびW成分を具備し、成分距離は成分の組の中のX、Y、Z、およびW成分の各々に付いて割り出される。1つ以上の実施形態に従って、複数のグラフィックス処理命令はフラグメント・シェーダを実行し、成分の組はR、G、B、およびA成分を具備し、成分距離は成分の組の中のR、G、B、およびA成分の各々に付いて割り出される。] [0017] この概要は、発明の本質が素早く理解されるように提供された。発明についてのより完全な理解は、その好ましい実施形態の以下の詳細な記述を添付図面とともに参照することによって得られる。] 図面の簡単な説明 [0018] 本開示の上記の特徴および目的は、添付図面とともに使用される以下の記述を参照してより明らかになるだろう。図面において、同様の参照数字は同様の要素を表わす。 本開示の1つ以上の実施形態に従って使用するための典型的な装置を図示するブロック図である。 本開示の1つ以上の実施形態に従ったシェーダ・コンパイラの典型的なブロック図を提供する。 本開示の1つ以上の実施形態に従って使用するための依存性グラフの例を提供する。 本開示の1つ以上の実施形態に従って命令スケジューラ・モジュールによって実行されるエッジ・レイテンシ割り出し工程フローを示す。 本開示の1つ以上の実施形態に従って命令スケジューラ・モジュールによって実行されるエッジ・レイテンシ割り出し工程フローを示す。 本開示の1つ以上の実施形態に従った命令距離割り出し工程フローを示す。 本開示の1つ以上の実施形態に従ったマスク距離割り出し工程フローを示す。 本開示の1つ以上の実施形態に従って先行命令および後続命令の例についての命令距離割り出しの実例を提供する。 本開示の1つ以上の実施形態に関して詳述されたシェーダを実行する命令の例を提供する。 本開示の1つ以上の実施形態に関して詳述されたシェーダを実行する命令の例を提供する。 本開示の1つ以上の実施形態に関して詳述されたシェーダを実行する命令の例を提供する。 本開示の1つ以上の実施形態に関して詳述されたシェーダを実行する命令の例を提供する。 本開示の1つ以上の実施形態に関して詳述されたシェーダを実行する命令の例を提供する。 本開示の1つ以上の実施形態に関して詳述されたシェーダを実行する命令の例を提供する。] 実施例 [0019] 次に、本開示のいくつかの実施形態が、前述の図を参照して詳述される。図において同様の参照数字は同様の構成要素を指す。] [0020] 1つ以上の実施形態に従って、コンパイラ(例えばシェーダ・コンパイラ)の命令スケジューラが依存する先行命令および後続命令との間の割り出された(determine、決定された、特定された)命令距離に基づいて命令レイテンシを減じるシステム、方法、および装置が開示される。本開示の1つ以上の実施形態に従って、シェーダ・コンパイラは、ハードウェア・タイミング制約に対処するともにスケジュール長さ(例えば命令/実行スケジュール中の命令数)を最小化する命令最適化器および命令スケジューラを具備する。シェーダを実行する命令を参照して命令スケジューリングの最適化が本明細書において開示されているが、本開示の実施形態はシェーダを実行する命令の最適化に制限される必要がないことは明らかなはずである。本開示の実施形態が使用されて任意の命令、コンピュータ・プログラム、プログラム・コード、またはプログラムあるいはプログラム・コード・セグメントのスケジューリングを最適化することが可能である。非制限的な例として、本明細書において開示されている実施形態の1つ以上は、複数の成分(例えば2つ、3つ、または4つの成分)から構成されるネイティブな(native)ベクトルをサポートするあらゆるプログラミング言語、およびそのようなプログラミング言語を使用して定義される任意のプログラムまたはプログラム・セグメントとともに使用されることが可能である。] [0021] 図1は、本開示の1つ以上の実施形態に従って使用するためのグラフィックス処理ユニット(GPU)104を含んだ典型的な演算装置100を図示するブロック図である。演算装置100は、パーソナル・コンピュータ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ワークステーション、ビデオゲーム・プラットフォームまたは、コンソール、セルラまたは衛星無線電話、地上通信線電話、インターネット電話、携帯型ビデオ・ゲーム装置または携帯情報端末のような携帯型装置、個人用音楽プレーヤ、サーバ、中間ネットワーク装置、メインフレーム・コンピュータ、またはグラフィック状の情報を出力する他の種類の装置を具備する。] 図1 [0022] 図1の例では、演算装置100は、中央処理装置(CPU)102、GPU104およびメモリ・モジュール116(例えばランダム・アクセス・メモリ(RAM)・メモリ・モジュール)を含んでいる。CPU102、GPU104、およびメモリ・モジュール116は、バス106を使用して通信する。バスは、既知かその後に発見される任意の種類のバスまたは装置相互接続構造(interconnect)を具備することが可能である。CPU102は汎用または専用マイクロプロセッサを具備することが可能である。例えば、CPU102は、カリフォルニア州サンタクララのインテル社によって提供されるCore2プロセッサまたは他の種類のマイクロプロセッサを具備し得る。GPU104は専用のグラフィックス・レンダリング装置である。GPU104は、演算装置100のマザーボードへ統合されるか、演算装置100のマザーボード中のポート内に設置されるグラフィックス・カード上にあるか、または例えば演算装置100と協働するように構成されることが可能である。] 図1 [0023] ディスプレイ・ユニット124は、演算装置100に接続され、例えばモニタ、テレビ、プロジェクタ装置、液晶ディスプレイ、プラズマ・ディスプレイ・パネル、発光ダイオード(LED)アレイ、陰極線管ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ(SED)、レーザー・テレビ・ディスプレイ、ナノクリスタル・ディスプレイ、または他の種類のディスプレイ・ユニットを具備する。図1の例では、ディスプレイ・ユニット124は演算装置100の一部であり得る。例えば、ディスプレイ・ユニット124は移動電話のスクリーンであり得る。あるいは、ディスプレイ・ユニット124は、コンピュータ装置100の外側にあり得、例えば、有線または無線通信接続、または他の接続によって演算装置100と通信状態にあり得る。非制限的な例として、ディスプレイ・ユニット124は、有線または無線接続によってパーソナル・コンピュータに接続されたコンピュータ・モニタまたはフラット・パネル・ディスプレイであり得る。] 図1 [0024] ソフトウェア・アプリケーション110はCPU102によって実行されることが可能である。ソフトウェア・アプリケーション110は、CPU102を介して実行可能な任意のソフトウェア・アプリケーション、非制限的な例としてビデオ・ゲーム、グラフィカル・ユーザ・インターフェース・エンジン、工学用コンピュータ支援設計プログラム、または芸術用アプリケーション、あるいは2次元(2D)グラフィックスまたは3次元(3D)グラフィックスを使用する他の種類のソフトウェア・アプリケーション、を具備することが可能である。] [0025] CPU102がソフトウェア・アプリケーション110を実行している際、ソフトウェア・アプリケーション110は、グラフィックス処理アプリケーション・プログラミング・インタフェース(API)112(非制限的な例としてOpenVG API、OpenGLAPI、Direct3DAPI、グラフィックス装置インターフェース(GDI)、Quartz、QuickDraw、または他の種類の2Dあるいは3Dグラフィックス処理APIのうちのいずれか1つ以上)のサブルーチンを呼び出すことが可能である。] [0026] 少なくとも1つの実施形態に従って、ソフトウェア・アプリケーション110がグラフィックス処理API112のサブルーチンを呼び出す際、グラフィックス処理API112はGPUドライバ114の1つ以上のサブルーチンを呼び出す。サブルーチンは演算装置100上のCPU102によって実行される。GPUドライバ114は、例えば、ソフトウェアおよび/またはグラフィックス処理API112とGPU104との間のインターフェースを提供するファームウェア命令の組を具備することが可能である。グラフィックス処理API112がGPUドライバ114のサブルーチンを呼び出す際、GPUドライバ114は表示可能なグラフィックス情報をGPU104に生成させるコマンドを作成および発行する。本明細書において開示されている1つ以上の実施形態に従うシェーダ・コンパイラは、GPUドライバ114の構成要素(例えばソフトウェア・モジュール)であることが可能である。GPUドライバ114は、シェーダ・コンパイラを使用してシェーダ・プログラムを機械レベルの命令に変換しGPU104に命令を伝える。例えば、グラフィックス処理API112がグラフィックス・プリミティブのバッチをレンダリングするためのGPUドライバ114のサブルーチンを呼び出す際、GPUドライバ114はGPU104に処理設定(processing configuration、処理コンフィギュレーション)を提供する。GPU104は、これを使用してグラフィックス・プリミティブのバッチをレンダリングする。GPU104は、グラフィックス・プリミティブのバッチをレンダリングし、例えば、グラフィックス・プリミティブのラスタ・イメージを出力する。] [0027] GPUドライバ114によって作成されたコマンドは、GPU104がこのコマンドを実行するのに使用する予定のグラフィックス処理設定(この設定はGPU104によって実行される予定の命令の組を特定することが可能である)、状態レジスタ値の組、およびGPU104がこのコマンドを実行するのに必要であり得る他の種類の情報を特定することが可能である。] [0028] GPUドライバ114がメモリ116中にグラフィックス処理設定を格納している場合、GPUドライバ114は、GPUドライバ114によって作成されたコマンド中のグラフィックス処理設定に対応するメモリ・モジュール116中の格納位置を参照することが可能である。GPU104がコマンドを受け取ると、GPU104は、GPUドライバ114から受け取った命令の中で参照されているグラフィックス処理設定をメモリ116から取得(retrieve)することが可能である。] [0029] 少なくとも1つの実施形態に従って、GPU104のコマンド・デコーダ126は、GPUドライバ114からのコマンドを解読し、複数の処理要素128の1つ以上を設定してコマンドを実行する。非制限的な例として、コマンド・デコーダ126はメモリ116からグラフィックス処理構成を取得し、このグラフィックス処理設定によって指定されている命令の組を処理要素128中にロードする。コマンド・デコーダ126は、また、1つ以上の処理要素128に入力データを提供するように構成されることが可能である 1つ以上の実施形態に従って、処理要素群128はグラフィックス・パイプライン108を実行する。そのような実施形態に従って、複数の処理要素128は、並行処理においてグラフィックス・パイプライン108を実行することが可能である。並行処理では、複数の処理要素128は並列にデータを処理することが可能である。このとき、ある処理要素128からの出力が別の処理要素128への入力として使用される。非制限的な例として、処理要素128Aは、コマンド・デコーダ126から受け取った第1の初期入力データの組に対して第1のグラフィックス処理を実行し、処理要素128Bに第1の中間結果の組を出力する。初期入力データは、例えば、1つ以上の頂点に対応するデータを具備することが可能であり、これらのデータは座標および属性データを具備することが可能である。頂点座標は、例えばX、Y、およびZ(幅、高さ、および深さ)座標と、遠近パラメータ(perspective parameter)を具備するW座標と、を有する4次元座標系に基づいてイメージ中の位置を特定する。頂点属性は、例えば、色、法線、および頂点と関連するテクスチャ座標を含むことが可能である。処理要素128Bは、処理要素128Aによって出力された第1の中間結果の組に対して別のグラフィックス処理を行ない、別の処理要素128に第2の中間結果の組を出力することが可能であり、以下、同様である。処理要素128Bが第2のグラフィックス処理を実行している間、処理要素128Aは、コマンド・デコーダ126から受け取った第2の初期入力データの組に対して第1のグラフィックス処理を実行することが可能である。] [0030] 処理要素群128は、このようにして、処理要素128Nがピクセル・オブジェクトをメモリ・モジュール116中の1つ以上のバッファに出力するか、この新しいピクセル・オブジェクトを何らかの他の目的地へ出力するまで、継続することが可能である。ピクセル・オブジェクトはピクセルを記述するデータである。各ピクセル・オブジェクトは複数の色値を指定し得、また、ピクセルの透明度レベルを指定することが可能である。いくつかの状況では、ピクセル・オブジェクトは第1の色フォーマットにおいて第1の色を指定し、第2の色フォーマットにおいて第2の色を指定し得る。] [0031] 本開示の1つ以上の実施形態に従って、処理要素群128の1つは、1つ以上の頂点シェーディング動作(これらの各々は、頂点データ(例えばX、Y、Z、およびW成分データ)に対して動作する)を実行する頂点シェーダ・ユニットとして構成されることが可能なプログラム可能処理要素を具備する。同様に、処理要素群の128のうちのこれと同一のまたは別の1つは、1つ以上のフラグメント・シェーディング動作(これらの各々は、ピクセル・データ(例えばR、G、B成分データ)に対して動作する)を実行するフラグメント・シェーダとして構成されることが可能なプログラマブル可能処理要素を具備する。] [0032] 本開示の1つ以上の実施形態に従って、コンパイラは、シェーダ演算(例えば頂点シェーダ、フラグメント・シェーダ演算)を実行するためにプログラム可能処理要素によって実行される予定の命令を含んでいるプログラム・コードを生成する。図2は、プログラム・コード(例えばシェーダ・プログラム・コード)をコンパイルするコンパイラの例を提供する。コンパイラ200は少なくとも1つの変換器202を具備する。変換器202は、シェーダ・プログラム・コード(これは高水準プログラミング言語またはアセンブリ言語のいずれかで書かれた命令の組を含んでいる)をプログラム可能処理要素206によって認識され得る機械レベル命令に変換する。コンパイラ200の命令スケジューラ204はプログラム可能処理要素206によって実行される命令をスケジューリングする。] 図2 [0033] スケジューリングされる予定の機械レベル(すなわち機械実行可能な)命令のグループを具備する入力リストは、命令スケジューラ204へ入力される。入力リスト中の、他の命令に依存(すなわち衝突)しない命令は、入力リストから準備完了(ready)リストに移動される。準備完了リストは、実行に向けてスケジューリングされる準備ができている全ての命令を格納する。命令は、スケジューリングされると、準備完了リストからアクティブ・リストに移動される。アクティブ・リストは、現在実行されている命令を格納する。命令は、実行を終えると、アクティブ・リストから結果リストに移動される。結果リストは、スケジューリングされかつ実行を終えた命令を格納する。結果リストは、命令スケジューラの出力を具備する。] [0034] 命令があるリストから別のリストにいつ移動されるかを制御するゲーティング(gating)条件は、依存グラフ(これは静的レイテンシを特定する)を使用して算出される。非制限的な例として、2つの命令I1とI2との間には、一方の命令I2が他方の命令I1の結果に依存する場合、または2つの命令の間に資源の衝突が存在する場合、依存が存在する。2つの命令の間に依存が存在し、命令I1がI2に先行する場合、命令I1は先行命令(先行命令、predecessor instruction)であるともに命令I2は後続命令(後続命令、successor instruction)であると判断される。依存グラフが使用されて2つの命令間の依存性を示すことが可能である。] [0035] 図3は、依存グラフの例またはその部分集合(subset)を提供する。依存グラフは、先行命令と後続命令との間に依存が存在することを示す。依存グラフ中のエッジ306が使用されて依存を示すことが可能である。重み308がエッジ306に関連付けられて、依存を解消するのに必要な命令実行サイクルの数(すなわち回数)を表わすことが可能である。重みはエッジ・レイテンシと称される。エッジ・レイテンシは、入力リストを使用して、静的なレイテンシ、例えば先行命令と関連するハードウェア・レイテンシとして最初に算出される。動的レイテンシは例えば命令/実行サイクル(これらの命令はアクティブ・リスト中にあったものである)で測定されたタイム・スパンである。] 図3 [0036] 先行命令P1は、n個の後続命令S1〜Snを有し得る(nは0以上であり得る)。各後続命令Sは、先行命令P1を含めてn個の先行命令P1〜Pnを有し得る。] [0037] 後続命令の動的レイテンシがその複数の静的レイテンシ(すなわちエッジ・レイテンシ)の1つと同じかそれ以上である場合、後続命令は先行命令の後続体(successor、後続命令)リストから除去されることが可能であり、先行命令は後続体の先行体(predecessor、先行命令)リストから除去されることが可能である。時間が進行する(例えば実行サイクルが起こる)ともに動的レイテンシが増加するに連れて、より多くの後続体および先行命令が除去され得る。アクティブ・リスト上にある指示は、その後続体が全て後続体リストから除去されると、完了する。また、入力リスト上にある指示は、その先行体が全て除去されると実行されるための準備完了となる。したがって、例えば、静的エッジ・レイテンシを最小化して後続命令の実行のタイミングを加速できることは有益である。有利なことに、本開示の1つ以上の実施形態を使用して特定されたエッジ・レイテンシを減少させることは、スケジュールの質を改善し、また、よりコードが小型になるという結果になる。] [0038] シェーダが書かれているプログラミング言語は特別なグラフィックスやマルチメディアのニーズを満たすために特別な言語構成体を含んでいることがある。特別なシェーダ・プログラミング言語および汎用プログラミング言語(例えばC++、および同種のもの)は、同様のデータ種類、配列、構造(structs)、ステートメント、および機能をサポートする。シェーダ・プログラミング言語は汎用言語ほど柔軟でないかもしれなく、またいくつかの一般的な機能に対する幾つかの制限を有しているかもしれないのに対し、シェーダ・プログラミング言語は汎用言語でサポートされていない幾つかの追加機能を有している。例えば、シェーダ言語は、複数の成分(例えば2つ、3つ、または4つの成分)から構成されるネイティブなベクトルに対するサポートを提供することが可能である。汎用プログラミング言語は、通常そのようなベクトルについての元々の(native)サポートを有さない。] [0039] シェーダ中で使用される典型的なプリミティブは、色および頂点(例えば赤、緑、青(R、G、B)のようなベクトルまたは(X、Y、Z、W))を具備する。複数成分ベクトルを使用することは、シェーダ・コンパイラを、汎用言語をコンパイルするコンパイラよりも複雑なものにする。本開示の実施形態は追加の情報を使用してレイテンシを減じるとともに命令スケジューリングを改善する。1つ以上のそのような実施形態に従って、ベクトルおよびそれらの属性を含むシェーダ・プログラミング言語の要素が分析されてエッジ・レイテンシを減じ、その結果、例えば実行待ちの命令の実行タイミングが減じられ、スケジューリングが改善され、コードがより小型化されることが可能である。] [0040] 命令同士の間に多くの種類の依存が存在する。フロー(すなわち真の)依存が、2つの命令I1とI2との間に存在する。ここで、I2はI1の出力を使用する。真の依存性は、2つの命令によって参照されるレジスタの番号および成分インデックスを検査することによって判断されることが可能である。非制限的な例として、命令I2は命令I1の後続体であり、それの複数のソース・オペランドの少なくとも1つとしてレジスタおよび成分(例えば、命令I1によって出力されるX成分)を使用する。] [0041] 命令I1とI2との間の出力の依存は、両方の命令が同じレジスタへの出力を行なう場合に、存在する。非制限的な例として、命令I1およびI2はレジスタR0に出力する。命令I1とI2との間の制御の依存は、実行のフローが論理演算の結果(例えば、if-else条件)によって決定される場合に、存在する。命令I1とI2との間の反依存(anti-dependence)は、命令I2の出力が、命令I1の入力と同じレジスタを使用する場合に、存在する。] [0042] 1つ以上の実施形態に従って、初期のエッジ・レイテンシは、先行命令と関連するハードウェア・レイテンシに基づいて割り出されることが可能である。命令I1とI2とが依存し合い、依存が真の依存である場合、ハードウェア・レイテンシの全体が初期エッジ・レイテンシとして使用されることが可能である。この初期エッジ・レイテンシは割り出された命令距離によって減じられることが可能である。1つ以上のそのような実施形態に従って、さらなる分析が実行されて、最初に先行命令のハードウェア・レイテンシであると割り出されたエッジ・レイテンシが割り出された命令距離によって減じられることが可能であるかどうか判断する。本開示の実施形態が使用されてフロー依存および固定のハードウェア・レイテンシが存在する場合以外の場合にエッジ・レイテンシを設定することが可能である。例えば、偽の依存(例えば反依存または出力依存)が存在する場合、エッジ・レイテンシは、1つ以上の実施形態に従って1に設定されることが可能である。] [0043] ハードウェア・レイテンシは、典型的には、命令を実行するプログラム可能(あるいは他の処理)ユニットのハードウェア設計者によって決定される。ハードウェア・レイテンシは、プログラム可能ユニットによる実行に向けて利用可能な命令群の各々についてのハードウェア・レイテンシを特定するレイテンシ表の一部として提供されることが可能である下記はハードウェア・レイテンシを割り出すための公式による(formal)等式を提供する。] [0044] HARDWARE_LATENCY(I1、I2)=スカラ命令I1およびI2についてハードウェア設計者によって提供されるレイテンシ。] [0045] 下記は、スカラ命令I1およびI2が両方ともADDである場合、およびI1がADD命令で、I2がBRANCH命令である場合の上記の等式の例を提供する。] [0046] HARDWARE_LATENCY (ADD, ADD) = 6 HARDWARE_LATENCY (ADD, BRANCH) = 10 下記は、本明細書において使用されている命令構文の非制限的な例を提供する。この例において、命令I1とI2との間には、nが命令I1およびI2の両方について同じ値であり、またI1が命令I2において使用される少なくとも1つの成分を定めているようなフロー依存が存在するものとする。] [0047] I1: (*i) def Rn.c I2: (*j) use Rn.d 上記の命令I1は、成分インデックスcを有するレジスタRnを特定し、また該命令は(i+1)回繰り返される。命令I2は、成分インデックスdを有するレジスタRnを使用し、また、命令は(j+1)回、繰り返される。成分インデックスは例えばX、Y、Z、またはWの1つ以上を指すことが可能である。この非制限的な例の一部として、このオペランド成分インデックスは、これらの命令の一方またはもう一方が繰り返される度にインクリメントされるものとする。上記の命令のベクトルの形態が使用されて2つの命令の間の1または複数の依存を特定することが可能である。下記は、上記のスカラ命令を変換した結果のベクトル形態を提供する。] [0048] I1: def Rn.mask1 I2: use Rn.mask2 mask1およびmask2は、命令I1およびI2のそれぞれの成分インデックスによって指されている成分を特定する。命令I1およびI2の両方がレジスタn上で動作するので、成分マスク(mask1とmask2)の検査が、命令I2が命令I1に依存するかを判断することが可能である。成分マスクは1または複数の成分を含み得る。成分の例は、RGBとXYZWを含んでいる(限定はされない)。成分マスクの例は、XYZW、YZWX、XY、Zを含んでいる(限定はされない)。mask1およびmask2が、それらが少なくとも1つの成分を共有するという意味で重なり合う場合、依存が存在する。真の依存またはフロー依存が存在する場合、機械レイテンシの全体が初期エッジ・レイテンシとして使用される。I1からI2への依存エッジの初期エッジ・レイテンシは次の通りである。] [0049] INITIAL LATENCY(I1, I2) =HARDWARE LATENCY(I1, I2)等式1 1つ以上の実施形態に従って、等式1は初期エッジ・レイテンシを特定する。初期エッジ・レイテンシは、下の等式2において例証されているように、2つの依存する命令の間で割り出された距離(命令距離)によって減じられることが可能である。] [0050] EDGE LATENCY(I1, I2) =HARDWARE LATENCY(I1, I2) - INSTRUCTION DISTANCE等式2 1つ以上の実施形態に従って、命令距離は、成分マスク、成分ストリング、成分距離、および成分マスク距離を使用して割り出されることが可能である。成分マスクは圧縮されたスカラ命令のオペランドから作製されたマスクである。圧縮されたスカラ命令は成分インデックスをインクリメントするかインデックスを維持することによって繰り返されることが可能である。下記は、圧縮されたスカラ命令の例を提供する。] [0051] (*2) ADDR0.X, (*)R1.Y, R2.X ここで、*に続く2は、命令がその最初の実行の後に2回繰り返されること、すなわち命令が合計3回実行されることを示す。第1のオペランドおよび第2のオペランドR0およびR1と関連する*は、2つのオペランドに対応する成分インデックスが、命令の1回目および2回目の実行の後にインクリメントされることになっていることを示す。この例では、命令は最初に実行され、さらに2回繰り返される。この圧縮されたスカラ命令は次の3つの圧縮されていないスカラ命令の等価物である。] [0052] E1: ADDR0.X, R1.Y, R2.X E2: ADD R0.Y, R1.Z, R2.X E3: ADD R0.Z, R1.W, R2.X 圧縮されていない命令の1回目の実行(E1)は、レジスタR0、R1、およびR2、ならびにX、Y、およびX成分をそれぞれ使用する。圧縮されていない命令の実行E1は、R1レジスタおよびR2レジスタと関連するX成分値およびY成分値が加えられ、またその結果がレジスタR0と関連するX成分に格納されるという結果となる。R0レジスタおよびR1レジスタと関連する成分インデックスは、R0レジスタおよびR1レジスタの各々と関連する*によって示されているように、インクリメントされる。圧縮されていない命令の2回目の実行(E2)では、R0レジスタおよびR1レジスタと関連する成分はそれぞれY成分およびZ成分である。R2レジスタと関連する成分(すなわちX成分)は不変である。2回目の実行E2はR1レジスタおよびR2レジスタと関連するZ成分値およびX成分値を加え、また、その結果はR0レジスタと関連するY成分に格納される。R0レジスタおよびR1レジスタと関連する成分がそれぞれZおよびWとなるようにR0レジスタおよびR1レジスタと関連する成分インデックスをインクリメントした後、圧縮されていない命令の3回目の実行(E3)は、レジスタR1、R2と関連するW成分値およびX成分値を加え、その結果をR0レジスタと関連するZ成分に格納する。] [0053] レジスタR0、R1、およびR2の各々についての成分マスクは、それぞれXYZ、YZW、およびXである。例証を進めると、R0レジスタのための成分マスクは、圧縮されていないスカラ命令の各々の実行(E1〜E3)においてそれぞれ使用されるR0レジスタの成分(すなわちそれぞれX、Y、Z)を使用して形成される。同様に、R1レジスタと関連する成分マスクは、命令の実行E1〜E3において使用されるY成分、Z成分、およびW成分から形成され、また、R2レジスタと関連する成分マスクは、命令の実行E1〜E3の全てにおけるこのレジスタのX成分を使用することによって形成される。] [0054] 1つ以上の実施形態に従って、ベクトル命令において使用されるスウィズル・マスク(swizzle mask)と異なり、重複する成分をマスクの中に有している複数のスカラ命令から構築されたマスクは、無効な成分マスクである。例えばそのような実施形態に従うと、XXYは、有効なスウィズル・マスクであるが有効な成分マスクではない。] [0055] 成分ストリングは、成分マスク(例えば先行命令および後続命令からの2つの成分マスク)を連結することによって生成される。例えば、成分マスクXYZWと成分マスクXYを連結することは、成分ストリングXYZWXYを形成する。成分距離COMPONENT_DIST(C,S)(Cは1つの成分(例えばX、Y、Z、またはWのうちの1つ)を表わし、Sは成分ストリングを表わす)は、成分ストリングSにおいて成分Cの2回の発生の間に成分C以外の成分が発生する回数と定義されることが可能である。この距離は、成分ストリングS中で成分Cが全く発生しないか1回の発生である場合、正の無限大(+INF)である。] [0056] 下記は、成分ストリングXYZWXYをSとして使用し、かつ成分X、Y、Z、およびWをCとして使用した成分距離算出の例を提供する。] [0057] COMPONENT_DIST (X, XYZWXY) = 3 COMPONENT_DIST (Y, XYZWXY) = 3 COMPONENT_DIST (Z, XYZWXY) = +INF COMPONENT_DIST (W, XYZWXY) = +INF 成分Xを使用した第1の成分距離割り出しでは、成分ストリング中に2回のXの発生があり、このXの2回の発生の間に3つの成分YZWが存在、すなわち発生する。成分Yを使用した第2の成分距離割り出しでは、Yの発生同士の間に起こる3つの成分YZWがある。ZとWに関する次の2つの成分距離割り出しでは、これらの成分は、いずれも成分ストリング中に1回だけ発生する。したがって、成分距離は+INFに設定される。] [0058] 成分マスク距離は、成分マスクM1およびM2を連結することによって形成された成分ストリングを使用して割り出された複数の成分距離のうちの最小の成分距離であると決定されることが可能である。次の等式3は、1つ以上の実施形態に従って成分マスク距離割り出しを公式化したものを提供する。] [0059] MASK_DIST (M1, M2) = smallest (COMP_DIST (X, M), COMP_DIST (Y, M), COMP_DIST (Z, M), COMP_DIST (W, M))等式3 ここで、MはM1とM2を連結したものである。] [0060] 例えば、 MASK_DIST (XYZW, XY) = 3である。なぜなら、成分マスクXYZWとXYとを連結したものはXYZWXYであり、X、Y、Z、およびWの成分距離はそれぞれ3、3、+INF、および+INFであるからである。] [0061] MASK_DIST (YZWX, XY) = 0である。なぜなら、成分マスクYZWXとXYとを連結したものはYZWXXYであり、X、Y、Z、およびWの成分距離はそれぞれ0、4、+INF、および+INFであるからである。] [0062] オペランド距離は、同じレジスタを使用するソース・オペランドおよびデスティネーション・オペランド(例えば先行命令において使用されるデスティネーション・オペランドおよび後続命令において使用されるソース・オペランド)と関連するマスク群を使用して割り出された成分マスク距離であると定義されることが可能である。オペランド距離は等式3を使用して割り出されたマスク距離である。例えば、Mは、先行命令中のオペランドと関連する成分マスクと後続命令中のオペランドと関連する成分マスクとを連結したものである。] [0063] 1つ以上の実施形態に従って、命令距離は複数のオペランド(例えば2つの依存する命令間で共有される各オペランド)の複数のマスク距離のうちの最小のマスク距離(すなわちオペランド距離)であると定義される。先行命令によって特定されるのと同じレジスタを使用する後続命令中に、1または複数のソース・オペランドが存在し得る。同じレジスタを使用する複数のソース・オペランドがある場合、複数のマスク距離が算出され、次いで最小のものが2つの命令の間の距離として選ばれることが可能である。また、1つ以上の実施形態に従って、2つの依存する命令I1とI2(I1は先行命令であり、I2は後続命令である)との間の命令距離は、以下のように公式化されることが可能である。] [0064] INSTR_DIST (I1, I2) = smallest (MASK_DIST (MD, MS1), ... MASK_DIST (MD, MSn)) 等式4 ここでMDはI1のデスティネーション・オペランドの成分マスクであり、MSiは、I1のデスティネーション(destination)を使用するI2のi番目のソース・オペランドであり、nはI1のデスティネーションを使用するI2のソース(source)の総数である。] [0065] 例えば、次の2つの命令の間の命令距離は1である。] [0066] I1: ADDR1.XYZ, R2.XYZ, R3.XYZ I2: MUL R4.X, R1.X, R1.Y I1の出力/デスティネーション(R1.XYZ)とI2の第1および第2入力/ソースとの間の割り出された命令距離は、それぞれ2と1である。したがって、上記のサンプルの命令中のI1とI2との間の距離は、以下のように表現されることが可能である。] [0067] INSTR_DIST (I1, I2) = 1 上に詳述されているように、本開示の実施形態は命令距離の分、初期エッジ・レイテンシを減じる。次の等式5が、1つ以上の実施形態に従って使用されるエッジ・レイテンシ決定を公式化したものを提供する。] [0068] EDGE_LATENCY (I1, I2) = max (1,HARDWARE_LATENCY (I1, I2) - INSTR_DIST (I1, I2))等式5 プログラム可能シェーダ・ユニットは、ALU、ELU、FLOW、およびMEMを含む(限定はされない)多くの命令形式をサポートする。ALU命令は、ADD、MUL、およびMOVのような(限定はされない)、算術および論理命令を具備する。ELU命令は、EXP、LOG、およびCOSのような(限定はされない)初等関数命令を具備する。FLOW命令は、JUMPおよびBRANCHのような(限定はされない)制御フロー命令を具備する。MEM命令は、SAMPLEおよびLOADのような(限定はされない)メモリ指向(memory oriented)命令を具備する。ALUのような(限定はされない)いくつかの形式は、確定的(deterministic)ハードウェア・レイテンシを有する。MEMのような(限定はされない)他の命令形式は、非確定的(nondeterministic)ハードウェア・レイテンシを有する。命令セットは、典型的には、例えば非確定的レイテンシについてWAIT演算を使用して同期機構をサポートする。] [0069] 依存関係を有する任意の2つの命令I1およびI2でかつI1がI2に先行する2つの命令I1およびI2について、本開示の1つ以上の実施形態は以下のようにエッジ・レイテンシを定義する。] [0070] 反依存または出力依存のような(限定はされない)偽の依存である場合、 EDGE_LATENCY (I1, I2) = 1等式6 依存がフロー依存でありかつI1が非確定的レイテンシを有する場合、 EDGE_LATENCY (I1, I2) = 1 等式7 依存がフロー依存でありかつI1が固定/確定的レイテンシを有する場合、 EDGE_LATENCY (I1, I2) = max (1,HARDWARE_LATENCY (I1, I2) - INSTR_DIST (I1, I2)) 等式8 依存がデータ依存関係ではなく制御依存である場合、 EDGE_LATECNY (I1, I2) = HARDWARE_LATENCY (I1, I2) 等式9 下記は、上記のエッジ・レイテンシの公式化したものの使用を例示する例を提供する。例のため、および例示を目的として、ALU型の命令は、5の固定レイテンシおよび2の命令距離を有し、ELU型の命令は非確定性レイテンシを有し、FLOW型の命令は1のレイテンシを有するとする。典型的なレイテンシおよび命令距離を使用して、次のエッジ・レイテンシが上記の公式化したものを使用して割り出される。] [0071] EDGE_LATENCY (ALU, ALU) = 3 EDGE_LATENCY (ALU, ELU) = 3 EDGE_LATENCY (ALU,FLOW) = 3 EDGE_LATENCY (ALU,MEM) = 3 上記の例において、2つの命令の間にはフロー依存があり、したがって、等式8が適用されると仮定されている。各例において、命令I1は、5の固定レイテンシおよび2の命令距離を有するALU型の命令である。2つの命令I1とI2との間にフロー依存が存在すると仮定すると、等式8が使用されてエッジ・レイテンシを割り出す。ALU命令の初期エッジ・レイテンシ(これはALU型の命令のハードウェア/固定レイテンシ5に相当する)は、2つの命令の間の命令距離2によって減じられ、すなわち、5−2=3である。] [0072] 図4(図4は、図4Aおよび図4Bを具備する)は、本開示の1つ以上の実施形態に従って命令スケジューラ・モジュールによって実行されるエッジ・レイテンシ割り出し工程フローを示している。本開示の実施形態は、命令スケジューラ204に提供された入力リスト中の命令の対(I1およびI2)の各々について本工程を繰り返す。ここで、対の中の命令のうちの一方は(例えばI2)は他方(例えばI1)に依存する。] 図4A 図4B [0073] ステップ402において、2つの命令(I1とI2)の間に依存が存在するか否かの判断がなされる。依存が存在しない場合、工程は、現在の命令対については終了し、次の1対の命令について、検討されるべき命令が無くなるまで、実行されることが可能である。2つの命令の間に依存が存在すると判断された場合、処理は継続してステップ404において依存がフロー依存でありかつ先行命令(例えばI1)が固定レイテンシを有するか判断する。そうでなければ、処理は継続して図4Bのステップ420において2つの依存する命令と関連するエッジ・レイテンシを等式6、7、または9によって設定し、この命令対についての処理は終了する。] 図4B [0074] ステップ404において2つの依存する命令の間にフロー依存が存在しかつ先行命令が固定レイテンシを有すると判断された場合、処理は継続して、ステップ406において先行命令および後続命令についての少なくとも1つの成分マスクを特定する。ステップ408において、成分ストリングが、ステップ406において先行命令および後続命令について特定された成分マスクを使用して特定される。処理は継続して、ステップ410において、命令距離をステップ408において割り出された成分ストリングを使用して割り出す。] [0075] 図5は本開示の1つ以上の実施形態に従った命令距離割り出し工程フローを示している。簡略的には、1つ以上の実施形態に従って、1つの命令距離が先行命令および後続命令の複数の共通のオペランド(例えば、レジスタ)を検査して個々の共通のオペランドについてのマスク距離を特定することによって割り出される。先行命令と後続命令との間のフロー依存の場合、後続命令のソース・オペランドは、先行命令のデスティネーション・オペランドを使用する。次に、複数の共通オペランドの各々について特定された複数のマスク距離が検査されて最小のマスク距離を有する共通オペランドを特定する。命令距離は、複数の共通オペランドと関連する複数のマスク距離のうちの最小のものに設定される。] 図5 [0076] 具体的には、ステップ502において、先行命令および後続命令によって共用されるオペランドのうちのいずれかが処理に向けて残っているか否かの判断がなされる。そうである場合、処理は継続して、ステップ504において、先行命令および後続命令によって共用される次のオペランド(例えば出力を格納するために先行命令によって使用されかつ入力として後続命令によって使用されるレジスタ)を特定する。ステップ506において、マスク距離が共通オペランドについて割り出される。] [0077] 図6は、本開示の1つ以上の実施形態に従った使用のためのマスク距離割り出し工程フローを示している。簡略的には、1つ以上の実施形態に従って、成分マスク(これは先行命令中のデスティネーションであるレジスタと関連する成分を具備する)、および成分マスク(これは後続命令中のソースとして使用される同一のレジスタと関連する成分を具備する)が特定される。特定された複数の成分マスクは成分ストリングを生成するために連結され、複数の成分距離が成分ストリングを使用して割り出される。割り出された複数の成分距離のうちで最小のものがマスク距離として使用される。] 図6 [0078] 図7は、本開示の1つ以上の実施形態に従った、先行命令および後続命令の例についての命令距離割り出しの実例を提供する。先行命令(I1)および後続命令(I2)は、図7の702において示されている。レジスタR1は、命令I1のデスティネーション・オペランドでありかつ命令I2のソース・オペランドである。実際には、レジスタR1は命令I2の複数のオペランドのうちの2つのソースである。図6のステップ群がソース成分マスク(MS1およびMS2)の各々について実行されて、2つのマスク距離が割り出される(レジスタR1を使用する命令I2の中の複数のソース・オペランドの各々について1つ)。表704に示すように、命令I1のデスティネーション・オペランドに対応する成分マスクMDはXYZであり、命令I2の2つのソース・オペランドMS1、MS2に対応する成分マスクはそれぞれX、Yである。] 図6 図7 [0079] 命令I2の第1のソース・オペランドについては、ステップ602において、成分マスクはMDおよびMS1(例えばそれぞれ先行命令I1および後続命令I2の成分マスク)である。ステップ604において、MDおよびMS1が連結されてXYZXを生成する。ステップ606および608において成分X、Y、Z、およびWが連結ストリングXYZWと比較されて各成分についての成分距離を割り出す。表708は、ステップ606および608を使用して割り出された各成分についての成分距離を示している。] [0080] 命令I2の第2のソース・オペランドについては、ステップ602において、成分マスクはMDおよびMS2(例えば先行命令I1および後続命令I2の成分マスク)である。表704に示されているように、MDはXYZであり、また、MS2はYである。ステップ604において、MDおよびMS2が連結されてXYZYを生成する。ステップ606および608において成分X、Y、Z、およびWが連結ストリングXYZYと比較されて各成分についての成分距離を割り出す。表712は、ステップ606および608を使用して割り出された各成分についての成分距離を示している。] [0081] ステップ606において全ての成分が処理されて成分距離を割り出したと判断された場合、処理は継続して、ステップ610において割り出された複数の成分距離からマスク距離を割り出す。具体的には、ステップ610において、割り出された複数の成分距離のうちの最小の成分距離が特定され、また、ステップ610において特定された最小の成分距離がステップ612において使用されてマスク距離を設定する。] [0082] 例では、図7および表708を参照すると、MDおよびMS1について決定された最小の成分距離は2である。等式706に示されているように、MDおよびMS1のマスク距離は2に設定される。さらなる非制限的な例として、等式710に示されているように、MDおよびMS2のマスク距離は1(すなわち表714に示されている最小の成分距離)である。] 図7 [0083] 再び図5を参照すると、先行命令と後続命令との間で共用される全てのオペランドが処理されたとステップ502で判断された場合、処理は継続してステップ508において命令距離を割り出す。具体的には、ステップ508において、割り出された複数のマスク距離の最小のマスク距離が特定される。非制限的な例として、および図7の等式706および710を参照すると、後続命令I2の第2のソース・オペランドに相当するマスク距離は、後続命令I2の第1のソース・オペランドに相当するマスク距離より小さい。図5のステップ510では、ステップ508において特定された最小のマスク距離が使用されて命令距離を設定する。図7に示されている例において、ステップ510において命令距離は1にセットされる。] 図5 図7 [0084] 再び図4を参照すると、ステップ412において、先行命令のハードウェア・レイテンシと割り出された命令距離との間の差分が割り出される。ステップ414において、割り出された差分が1を超えているか否かの判断がなされる。そうでなければ、処理は継続して、ステップ422において、エッジ・レイテンシを1に設定し、また現在の命令対についての処理は終了する。割り出された差分が1を超えているとステップ414において判断された場合、処理は継続して、ステップ416において、2つの依存する命令の間のエッジ・レイテンシを先行命令のハードウェア・レイテンシと割り出された命令距離との間の差分に設定する。] [0085] 図4の例示的な工程フローにおいて示されているように、本開示の実施形態は、先行命令と後続命令との間の依存がフロー依存以外である場合、または先行命令が固定ハードウェア・レイテンシを有さない場合、エッジ・レイテンシを1に設定する。下記はいくつかの非制限的な例を提供する。] [0086] 次の例において、命令I1はELU型命令である。ELU型命令はこの例において非確定的レイテンシを有している。命令I1が非確定的レイテンシを有しているので、等式7が次の各例において使用される。その結果、初期エッジ・レイテンシの値にかかわらずエッジ・レイテンシは1に設定される。] [0087] EDGE_LATENCY (ELU,ALU) = 1 EDGE_LATENCY (ELU, ELU) = 1 EDGE_LATENCY (ELU,FLOW) = 1 EDGE_LATENCY (ELU,MEM) = 1 次の例では、命令I1は、命令I2と依存性を有するとされているMEMのような命令である。この例では、これらの仮定によって、等式6が使用されて、その結果、エッジ・レイテンシは初期エッジ・レイテンシの値にかかわらず1に設定される。] [0088] EDGE_LATENCY (MEM,ALU) = 1 EDGE_LATENCY (MEM, ELU) = 1 EDGE_LATENCY (MEM,FLOW) = 1 EDGE_LATENCY (MEM, MEM) = 1 次の例では、FLOW型命令である命令I1は、1のハードウェア・レイテンシを有するとともにデータ依存関係ではなく制御依存を有している。この例では、等式9および命令I1のハードウェア・レイテンシが使用され、その結果、エッジ・レイテンシは1(初期エッジ・レイテンシ)に設定される。] [0089] EDGE_LATENCY (FLOW,ALU) = 1 EDGE_LATENCY (FLOW, ELU) = 1 EDGE_LATENCY (FLOW, FLOW) = 1 EDGE_LATENCY (FLOW,MEM) = 1 1つ以上の実施形態に従って、挿入されることが可能な有用な命令(例えば、シェーダの一部を実行する独立した命令)が無い場合、命令スケジューラ204は、多くのNOP、すなわちWAIT命令を挿入して命令の実行を同期させる。下記は、上に詳述されている典型的な初期エッジ・レイテンシ、命令距離、および依存性を使用してスケジューリングされるシェーダ・コードの例を提供する。上に詳述されているALU命令に関する例において、5の初期エッジ・レイテンシは2の命令距離によって減じられ、その結果、得られたエッジ・レイテンシは、ALUタイプ命令である第1命令I1およびELU、FLOW、およびMEM型命令のうちの1つである第2命令I2とともに等式8を使用して、3であると割り出される。3のエッジ・レイテンシは、第2のALU命令が実行される前に3つの実行サイクルがあるはずであることを示している。下の1〜4のケースでは、5のハードウェア・レイテンシについて必要なはずの4つのNOPではなく、2つのNOPが2つの命令I1とI2との間に挿入される。第1の命令が1の実行サイクルを占めるので、2つのNOP命令は最後の2つの実行サイクルを占め、その結果、3のエッジ・レイテンシが提供され得る。これは、2つのNOPの減少(このことは、実行時間を減じる)につながり、実行される予定の命令がより少なくなる結果となる。] [0090] ケース1:ALU命令はALU命令に依存する ALU NOP NOP ALU ケース2:ELU命令はALU命令に依存する ALU NOP NOP ELU ケース3:FLOW命令はALU命令に依存する ALU NOP NOP FLOW ケース4:MEM命令はALU命令に依存する ALU NOP NOP MEM ケース5〜8は先行命令としてELU命令を含んでいる。この例において、ELU命令は、非確定的レイテンシを有している。このことは、等式7によって、エッジ・レイテンシが1に設定される結果となる。レイテンシが非確定的である(例えば、後続命令が実行されるべき前に実行されるべき実行サイクル(すなわちNOP)の数が決定可能でない)ので、後続命令はALU命令の実行の完了を待つ。] [0091] ケース5:ALU命令はELU命令に依存する ELU (待ち)ALU ケース6:ELU命令はELU命令に依存する ELU (待ち)ELU ケース7:FLOW命令はELU命令に依存する ELU (待ち)FLOW ケース8:MEMの命令はELU命令に依存する ELU (待ち)MEM ケース9〜12では、先行命令と後続命令との間の依存は偽の依存であるとされる。このことは、エッジ・レイテンシが等式7によって1に設定される結果となる。先行命令と後続命令との間の依存が偽の依存であるので、後続命令は先行のMEMの命令の実行の完了を待つ。] [0092] ケース9:ALU命令はMEMの命令に依存する MEM (待ち)ALU ケース10:ELU命令はMEMの命令に依存する MEM (待ち)ELU ケース11:FLOW命令はMEMの命令に依存する MEM (待ち)FLOW ケース12:MEMの命令はMEMの命令に依存する MEM (待ち)MEM ケース13〜16の例では、依存は制御依存とされる。このことは、等式9によって、エッジ・レイテンシが1に設定される結果となる。] [0093] ケース13:ALU命令はFLOW命令に依存する FLOW ALU ケース14:ELU命令はFLOW命令に依存する FLOW ELU ケース15:FLOW命令はFLOW命令に依存する FLOW FLOW ケース16:MEMの命令はFLOW命令に依存する FLOW MEM 本開示の実施形態は、初期エッジ・レイテンシを減じるか、不必要なNOPを除去する。例えば、ケース1〜4では、初期エッジ・レイテンシ(これは5に等しい)は2〜3減じられる。4つのNOPを使用する(これは初期エッジ・レイテンシのケースで必要とされるだろう)代わりに、2つのNOPのみが使用され、それによって、2つの不必要なNOPを除去する。典型的なシェーダは、計算が非常に多く(computation intensive)、かなりの数のケース1〜4を含んでいる。したがって、実行リソースを著しく節約することが、本開示の実施形態を使用して達成されることが可能である。] [0094] 本開示の1つ以上の実施形態に従って、命令スケジューラはエッジ・レイテンシを動的レイテンシと比較して先行体(先行命令)および後続体(後続命令)を除去する。エッジ・レイテンシがより小さいことは、結果的に後続命令と先行命令を早くに除去する結果となる。除去されることが可能な後続命令および先行命令がより多いほど、独立的であってひいてはスケジューリングされる準備ができていると考えられる命令がより多くなり得る。スケジューリングされる準備ができている命令が多いほど、ハードウェア・レイテンシを埋め合わせるためにコードに挿入される必要のあるNOPはより少なくなる。スケジューリングされているコードに挿入される必要のあるNOPの数が減少することは、スケジューリングおよび実行されるコードの効率につながる。コードがシェーダを実行する場合、本開示の実施形態が使用されて、例えば、エッジ・レイテンシの減少を特定し、命令スケジューラのスケジューリング出力を最適化するとともにシェーダの実行を最適化することが可能である。上に詳述されているとともに以下に繰り返されている例は、説明用の例を提供するのに資する。] [0095] I1: ADDR1.XYZ, R2.XYZ, R3.XYZ I2: MUL R4.X, R1.X, R1.Y ADDとMULとの間のハードウェア・レイテンシが3である場合、本開示の実施形態を使用しなければ、スケジューリングされたコードは以下のようになるだろう。] [0096] I1: ADDR1.XYZ, R2.XYZ, R3.XYZ NOP NOP I2: MUL R4.X, R1.X, R1.Y 上に詳述されているように、少なくとも1つの実施形態を使用して割り出された命令距離は1である。本開示の1つ以上の実施形態を使用すると、エッジ・レイテンシは、ハードウェア・レイテンシから命令距離が減じられたものであると決定されることが可能である。したがって、上記のスケジューリングされたコード例では必要だった2つのNOPの代わりに、1つのNOPのみが次のスケジューリングされたコード例において使用される。以下の命令スケジューラ出力において例示されているように、NOPの数は、上記のケースにおける2つのNOPではなく、1つのNOPへと減少する。] [0097] I1: ADDR1.XYZ, R2.XYZ, R3.XYZ NOP I2: MUL R4.X, R1.X, R1.Y NOPの数が減少するのは、命令距離を初期エッジ・レイテンシ(例えばハードウェア・レイテンシ)に適用した結果である。上に詳述されているように、1つ以上の実施形態に従ってこれらの2つの命令について割り出された命令距離は1である。1つ以上のそのような実施形態に従って、先行命令のハードウェア・レイテンシは割り出された命令距離の分減じられて2つの命令の間の減じられたエッジ・レイテンシを生成する。減じられたエッジ・レイテンシの結果、NOPの数は2から1に減少されることが可能である。このエッジ・レイテンシは2つのサイクルに対応しており、I1の実行がこの2つの実行サイクルのうちの一方に対応するとともにNOPが2つ目の実行サイクルに対応する。有利なことに、本開示の実施形態は不必要であると判断されたNOPの数を減らして、その結果、命令スケジューラは、2つの依存する命令の間の同期を達成するのに必須なNOPを超えないNOPしか出力しないということが可能である。] [0098] 図8(図8は、図8A〜図8Fを具備する)は、本開示の1つ以上の実施形態に関して詳説されているシェーダを実行する命令の例を提供する。図8Aおよび図8Bは、命令スケジューラへのシェーダ入力を実行する命令の組の例を提供する。図8Cおよび図8Dは、本開示の1つ以上の実施形態と関連する処理の利点を有さない命令スケジューラによる出力の例を提供する。図8Eおよび図8Fは、本開示の1つ以上の実施形態と関連する処理から利点を得る命令スケジューラによる出力の例を提供する。] 図8A 図8B 図8C 図8D 図8E 図8F [0099] 図8に示されている例において、本開示の1つ以上の実施形態に従ってエッジ・レイテンシの減少を使用する命令スケジューラは、NOPの数を、図8Cおよび8Dにおいて示されている出力中の48から、図8Eおよび8Fにおいて示されている出力中の40まで、効果的に減じる。これは、命令スケジューラのシェーダ命令出力から8つの不必要なNOPの減少である。] 図8C 図8E [0100] NOPの数の減少の例は、命令37、44、53、および60に関して観察されることが可能である。各ケースにおいて、NOPの数は3から1になる。エッジ・レイテンシの減少を使用せずに命令37を使用することを例証するために、命令スケジューラによるコード・フラグメント出力は、(図8Cおよび図8Dに示されているように)以下の通りである。] 図8C 図8D [0101] 36(154) type3: (rpt1/syn)fmac r18.z, (r)r16.y, (r)r15.y 37(219) type0: (rpt2)nop 38(157) type3: (lock)fmul dummy, r18.x, r18.x 39(158) type3: (rpt1)fmac r20.x, (r)r18.y, (r)r18.y コード・フラグメント812では、命令39の両方のソース・オペランドは、命令36(すなわちr18.z)の結果を使用する。fmacのハードウェア・レイテンシが4である場合、本開示の1つ以上の実施形態を使用しないと、4の初期エッジ・レイテンシが使用されて、4のレイテンシ要求が満たされることを保証するために3つのNOPが命令37に挿入されるべきであると決定する。命令37は、第1のNOPそして次に2回の反復を実行して3つの実行サイクルを生成する。命令36の実行と合わせると、命令38が実行される前に4つの実行サイクルが発生する。] [0102] 対照的に、本開示の1つ以上の実施形態を用いると、エッジ・レイテンシは減じられて1つのNOPのみが使用される。図8E中のコード822が、以下に転記される。] 図8E [0103] 36(154) type3: (rpt1/syn)fmac r18.z, (r)r16.y, (r)r15.y 37(219) type0: nop 38(157) type3: (lock)fmul dummy, r18.x, r18.x 39(158) type3: (rpt1)fmac r20.x, (r)r18.y, (r)r18.y 命令36および命令39は、fmacすなわち浮動小数点積和である。命令39は命令36に依存する。なぜなら、それらの成分マスク(Z)および(YZ)は、少なくとも1つの成分を共有するからである。1つ以上の実施形態を適用すると、(命令I1としての)命令36と命令I1に依存しかつ後続する(命令I2としての)命令39との間の命令距離が割り出される。成分距離(C、S)は、1の成分の距離を有するZ以外は、各成分について+INFである。命令距離は複数の成分距離のうちの最小のもの、すなわち1である。MASK_DIST(Z、YZ)が1であるので、命令距離は1と割り出される。fmacのデスティネーション・マスクはZであり、ZWではない。なぜなら、fmacは成分インデックスをインクリメントしないからである。38における有用な命令を用いて、1つのNOPのみが必要とされる。] [0104] 1つ以上の例示的な実施形態において、記述されている機能は、ハードウェア、ソフトウェア、および/またはファームウェア、あるいはそれらのあらゆる組合せにおいて実現されることが可能である。ハードウェアにおいて実行される場合、機能は、1つ以上のマイクロプロセッサ、マイクロコントローラ、ディジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイなど(FPGA)において実行されることが可能である。そのような構成要素は通信システム、データ書き込みおよび/または読み出しシステム、または他のシステム内に位置することが可能である。ソフトウェアにおいて実現される場合、関数は1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に格納されるかその上で送信され得る。コンピュータ可読媒体は、有形のコンピュータ記憶装置媒体、およびコンピュータ・プログラムのある位置から別の位置への移動を促進する任意の媒体を含む通信媒体、を含んでいる。記憶媒体は、コンピュータによってアクセスされることが可能な任意の利用可能な物理的媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、フラッシュ・メモリ、読み出し専用メモリ(ROM)、電気的消去可能プログラム可能読み出し専用メモリ(EEPROM)、コンパクト・ディスク読み出し専用メモリ(CD−ROM)または他の光学ディスク記憶装置、磁気ディスク記憶装置あるいは他の磁気記憶装置、または命令またはデータ構造の形態の所望のプログラム・コードを格納するために使用されることが可能でかつコンピュータによってアクセスされることが可能な他のあらゆる媒体を具備し得る。用語「コンピュータ可読媒体」は有形のコンピュータ・プログラム製品としても定義されることが可能である。本明細書において使用されているディスク(disk)とディスク(disc)は、コンパクト・ディスク(CD)、レーザーディスク(登録商標)、光ディスク、ディジタル多用途ディスク(DVD)、フローッピー(登録商標)ディスクおよびブルーレイ・ディスクを含んでいる。ここで、ディスク(disk)は通常磁気的にデータを再生し、他方、ディスク(disc)はレーザーでデータを光学的に再生する。上記のものの組合せもコンピュータ可読媒体の範囲内に含まれるべきである。] [0105] 装置および方法が、現在最も実際的でかつ好ましい実施形態であると考えられるものに関して記述されており、本開示が、開示されている実施形態に制限される必要がないことが理解されるべきである。請求項の思想および範囲内に含まれる様々な修正および同様の構成にわたることが意図されている。その範囲はそのような修正および同様の構造を全て包含するように最も広い解釈と一致するべきである。本開示は、次の請求項群の任意のかつ全ての実施形態を含んでいる。]
权利要求:
請求項1 複数のグラフィックス処理命令のうちの2つの命令の間の依存を特定することであって、前記2つの命令のうちの一方は先行命令を具備し、前記2つの命令のうちのもう一方は後続命令を具備する、特定することと、前記先行命令と前記後続命令との間の前記依存と関連する初期エッジ・レイテンシを割り出すことと、前記先行命令および前記後続命令に対応する命令距離を割り出すことと、前記初期エッジ・レイテンシを前記割り出された命令距離によって減じて前記先行命令と前記後続命令との間の前記依存と関連する、減じられたエッジ・レイテンシを割り出すことと、を具備する方法。 請求項2 前記減じられたエッジ・レイテンシを使用して前記後続命令の実行をスケジューリングすること、をさらに具備する、請求項1の方法。 請求項3 前記後続命令の実行を開始する前に実行される予定の複数の同期用命令の数を割り出して前記先行命令および前記後続命令の実行を同期させることであって、前記複数の同期用命令の数は、前記減じられたエッジ・レイテンシを使用して割り出され、各同期用命令は、独立した命令またはNOPである、割り出すこと、をさらに具備する、請求項1の方法。 請求項4 前記複数のグラフィックス処理命令がシェーダを実行する、請求項1の方法。 請求項5 前記シェーダが頂点シェーダである、請求項4の方法。 請求項6 前記シェーダがフラグメント・シェーダである、請求項4の方法。 請求項7 前記初期エッジ・レイテンシが前記先行命令と関連するハードウェア・レイテンシである、請求項1の方法。 請求項8 前記依存が、前記先行命令のデスティネーションが前記後続命令のソースであるというフロー依存を具備する、請求項1の方法。 請求項9 命令距離を割り出すことが、前記先行命令のデスティネーション・オペランドに相当する前記後続命令の各ソース・オペランドについてのマスク距離を割り出すことと、複数の前記割り出されたマスク距離のうちの最小のマスク距離を前記命令距離として選択することと、をさらに具備する、請求項1の方法。 請求項10 前記後続命令の各ソース・オペランドについてのマスク距離を割り出すことが、前記先行命令の前記デスティネーション・オペランドについての成分マスク、および前記後続命令の前記ソース・オペランドについての成分マスクを割り出すことと、前記デスティネーション・オペランドの成分マスクおよび前記ソース・オペランドの成分マスクを連結することによって、成分ストリングを生成することと、前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことと、複数の前記割り出された成分距離のうちの最小の成分距離を前記ソース・オペランドについての前記マスク距離と特定することと、をさらに具備する、請求項9の方法。 請求項11 前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことが、前記成分の組の中の各成分について、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第1の発生の位置を特定することと、前記成分の第1の発生が特定された場合、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第2の発生の位置を特定することであって、前記第2の発生は前記成分ストリングの中の前記第1の発生の後である、特定することと、前記成分の第2の発生の位置が特定された場合、前記成分ストリング中の前記成分の前記第1の発生と前記第2発生との間の成分の数を割り出すことと、前記成分についての前記成分距離を前記割り出された成分の数に設定することと、をさらに具備する、請求項10の方法。 請求項12 前記複数のグラフィックス処理命令が頂点シェーダを実行し、前記成分の組がX、Y、Z、およびW成分を具備する、請求項11の方法。 請求項13 前記複数のグラフィックス処理命令がフラグメント・シェーダを実行し、前記成分の組がR、G、B、およびA成分を具備する、請求項11の方法。 請求項14 少なくともグラフィックス・パイプラインの一部を実行するように構成された少なくとも1つのプログラム可能処理ユニットと、減じられたエッジ・レイテンシを使用して前記少なくとも1つのプログラム可能演算処理装置による実行のための複数の命令をスケジューリングするように構成された命令スケジューラであって、複数のグラフィックス処理命令のうちの2つの命令の間の依存を特定することであって、前記2つの命令のうちの一方は先行命令を具備し、前記2つの命令のうちのもう一方は後続命令を具備する、特定することと、前記先行命令と前記後続命令との間の前記依存と関連する初期エッジ・レイテンシを割り出すことと、前記先行命令および前記後続命令に対応する命令距離を割り出すことと、前記初期エッジ・レイテンシを前記割り出された命令距離によって減じて前記先行命令と前記後続命令との間の前記依存と関連する、減じられたエッジ・レイテンシを割り出すことと、を実行するように構成されている命令スケジューラと、を具備する装置。 請求項15 前記命令スケジューラが、前記後続命令の実行を開始する前に実行される予定の複数の同期用命令の数を割り出して前記先行命令および前記後続命令の実行を同期させることであって、前記複数の同期用命令の数は、前記減じられたエッジ・レイテンシを使用して割り出され、各同期用命令は、独立した命令またはNOPである、割り出すこと、を実行するようにさらに構成されている、請求項14の装置。 請求項16 前記少なくとも1つのプログラム可能処理ユニットが、前記複数のグラフィックス処理命令に基づいてシェーダを実行する、請求項14の装置。 請求項17 前記シェーダが頂点シェーダである、請求項16の装置。 請求項18 前記シェーダがフラグメント・シェーダである、請求項16の装置。 請求項19 前記初期エッジ・レイテンシが、前記少なくとも1つのプログラム可能処理ユニットによる前記先行命令の実行と関連するハードウェア・レイテンシである、請求項14の装置。 請求項20 前記依存が、前記先行命令のデスティネーションが前記後続命令のソースであるというフロー依存を具備する、請求項14の装置。 請求項21 命令距離を割り出すことを実行するように構成されている前記命令スケジューラが、前記先行命令のデスティネーション・オペランドに相当する前記後続命令の各ソース・オペランドについてのマスク距離を割り出すことと、複数の前記割り出されたマスク距離のうちの最小のマスク距離を前記命令距離として選択することと、をさらに実行するように構成されている、請求項14の装置。 請求項22 前記後続命令の各ソース・オペランドについてのマスク距離を割り出すことを実行するように構成されている前記命令スケジューラが、前記先行命令の前記デスティネーション・オペランドについての成分マスク、および前記後続命令の前記ソース・オペランドについての成分マスクを割り出すことと、前記デスティネーション・オペランドの成分マスクおよび前記ソース・オペランドの成分マスクを連結することによって、成分ストリングを生成することと、前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことと、複数の前記割り出された成分距離のうちの最小の成分距離を前記ソース・オペランドについての前記マスク距離と特定することと、をさらに実行するように構成されている、請求項21の装置。 請求項23 前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことを実行するように構成されている前記命令スケジューラが、前記成分の組の中の各成分について、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第1の発生の位置を特定することと、前記成分の第1の発生が特定された場合、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第2の発生の位置を特定することであって、前記第2の発生は前記成分ストリングの中の前記第1の発生の後である、特定することと、前記成分の第2の発生の位置が特定された場合、前記成分ストリング中の前記成分の前記第1の発生と前記第2発生との間の成分の数を割り出すことと、前記成分についての前記成分距離を前記割り出された成分の数に設定することと、をさらに実行するように構成されている、請求項22の装置。 請求項24 少なくとも1つのプログラム可能処理ユニットが前記複数のグラフィックス処理命令を使用して頂点シェーダを実行し、前記成分の組がX、Y、Z、およびW成分を具備する、請求項23の装置。 請求項25 少なくとも1つのプログラム可能処理ユニットが前記複数のグラフィックス処理命令を使用してフラグメント・シェーダを実行し、前記成分の組がR、G、B、およびA成分を具備する、請求項23の装置。 請求項26 コンピュータによって実行可能なプログラム・コードが格納されるコンピュータ可読メモリ媒体であって、前記プログラム・コードが、複数のグラフィックス処理命令のうちの2つの命令の間の依存を特定することであって、前記2つの命令のうちの一方は先行命令を具備し、前記2つの命令のうちのもう一方は後続命令を具備する、特定することと、前記先行命令と前記後続命令との間の前記依存と関連する初期エッジ・レイテンシを割り出すことと、前記先行命令および前記後続命令に対応する命令距離を割り出すことと、前記初期エッジ・レイテンシを前記割り出された命令距離によって減じて前記先行命令と前記後続命令との間の前記依存と関連する、減じられたエッジ・レイテンシを割り出すことと、を実行するためのコードを具備する、コンピュータ可読メモリ媒体。 請求項27 前記プログラム・コードが、前記減じられたエッジ・レイテンシを使用して前記後続命令の実行をスケジューリングすること、をさらに具備する、請求項26の媒体。 請求項28 前記後続命令の実行を開始する前に実行される予定の複数の同期用命令の数を割り出して前記先行命令および前記後続命令の実行を同期させることであって、前記複数の同期用命令の数は、前記減じられたエッジ・レイテンシを使用して割り出され、各同期用命令は、独立した命令またはNOPである、割り出すこと、を実行するためのコードをさらに具備する、請求項26の媒体。 請求項29 前記複数のグラフィックス処理命令がシェーダを実行する、請求項26の媒体。 請求項30 前記シェーダが頂点シェーダである、請求項29の媒体。 請求項31 前記シェーダがフラグメント・シェーダである、請求項29の媒体。 請求項32 前記初期エッジ・レイテンシが前記先行命令と関連するハードウェア・レイテンシである、請求項26の媒体。 請求項33 前記依存が、前記先行命令のデスティネーションが前記後続命令のソースであるというフロー依存を具備する、請求項26の媒体。 請求項34 命令距離を割り出すことを実行するように構成されている前記プログラム・コードが、前記先行命令のデスティネーション・オペランドに相当する前記後続命令の各ソース・オペランドについてのマスク距離を割り出すことと、複数の前記割り出されたマスク距離のうちの最小のマスク距離を前記命令距離として選択することと、を実行するためのコードをさらに具備する、請求項26の媒体。 請求項35 前記後続命令の各ソース・オペランドについてのマスク距離を割り出すことを実行するように構成されている前記プログラム・コードが、前記先行命令の前記デスティネーション・オペランドについての成分マスク、および前記後続命令の前記ソース・オペランドについての成分マスクを割り出すことと、前記デスティネーション・オペランドの成分マスクおよび前記ソース・オペランドの成分マスクを連結することによって、成分ストリングを生成することと、前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことと、複数の前記割り出された成分距離のうちの最小の成分距離を前記ソース・オペランドについての前記マスク距離と特定することと、を実行するためのコードをさらに具備する、請求項34の媒体。 請求項36 前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すことを実行するように構成されている前記プログラム・コードが、前記成分の組の中の各成分について、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第1の発生の位置を特定することと、前記成分の第1の発生が特定された場合、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第2の発生の位置を特定することであって、前記第2の発生は前記成分ストリングの中の前記第1の発生の後である、特定することと、前記成分の第2の発生の位置が特定された場合、前記成分ストリング中の前記成分の前記第1の発生と前記第2発生との間の成分の数を割り出すことと、前記成分についての前記成分距離を前記割り出された成分の数に設定することと、を実行するためのコードをさらに具備する、請求項35の媒体。 請求項37 前記複数のグラフィックス処理命令が頂点シェーダを実行し、前記成分の組がX、Y、Z、およびW成分を具備する、請求項36の媒体。 請求項38 前記複数のグラフィックス処理命令がフラグメント・シェーダを実行し、前記成分の組がR、G、B、およびA成分を具備する、請求項36の媒体。 請求項39 少なくともグラフィックス・パイプラインの一部を実行するように構成された少なくとも1つのプログラム可能処理ユニットと、減じられたエッジ・レイテンシを使用して前記少なくとも1つのプログラム可能演算処理装置による実行のための複数の命令をスケジューリングするように構成された命令スケジューリング手段であって、複数のグラフィックス処理命令のうちの2つの命令の間の依存を特定するための手段であって、前記2つの命令のうちの一方は先行命令を具備し、前記2つの命令のうちのもう一方は後続命令を具備する、特定するための手段と、前記先行命令と前記後続命令との間の前記依存と関連する初期エッジ・レイテンシを割り出すための手段と、前記先行命令および前記後続命令に対応する命令距離を割り出すための手段と、前記初期エッジ・レイテンシを前記割り出された命令距離によって減じて前記先行命令と前記後続命令との間の前記依存と関連する、減じられたエッジ・レイテンシを割り出すための手段と、を具備する命令スケジューリング手段と、を具備する装置。 請求項40 前記命令スケジューリング手段が、前記後続命令の実行を開始する前に実行される予定の複数の同期用命令の数を割り出して前記先行命令および前記後続命令の実行を同期させることための手段であって、前記複数の同期用命令の数は、前記減じられたエッジ・レイテンシを使用して割り出され、各同期用命令は、独立した命令またはNOPである、割り出すための手段、をさらに具備する、請求項39の装置。 請求項41 前記少なくとも1つのプログラム可能処理ユニットが、前記複数のグラフィックス処理命令に基づいてシェーダを実行する、請求項39の装置。 請求項42 前記シェーダが頂点シェーダである、請求項41の装置。 請求項43 前記シェーダがフラグメント・シェーダである、請求項41の装置。 請求項44 前記初期エッジ・レイテンシが、前記少なくとも1つのプログラム可能処理ユニットによる前記先行命令の実行と関連するハードウェア・レイテンシである、請求項39の装置。 請求項45 前記依存が、前記先行命令のデスティネーションが前記後続命令のソースであるというフロー依存を具備する、請求項39の装置。 請求項46 命令距離を割り出すための手段が、前記先行命令のデスティネーション・オペランドに相当する前記後続命令の各ソース・オペランドについてのマスク距離を割り出すための手段と、複数の前記割り出されたマスク距離のうちの最小のマスク距離を前記命令距離として選択するための手段と、をさらに具備する、請求項39の装置。 請求項47 前記後続命令の各ソース・オペランドについてのマスク距離を割り出すための手段が、前記先行命令の前記デスティネーション・オペランドについての成分マスク、および前記後続命令の前記ソース・オペランドについての成分マスクを割り出すための手段と、前記デスティネーション・オペランドの成分マスクおよび前記ソース・オペランドの成分マスクを連結することによって、成分ストリングを生成するための手段と、前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すための手段と、複数の前記割り出された成分距離のうちの最小の成分距離を前記ソース・オペランドについての前記マスク距離と特定するための手段と、をさらに具備する、請求項46の装置。 請求項48 前記成分ストリングを使用して成分の組の中の各成分と関連する成分距離を割り出すための手段が、前記成分の組の中の各成分について、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第1の発生の位置を特定するための手段と、前記成分の第1の発生が特定された場合、前記成分ストリングを検査して前記成分ストリングの中の前記成分の第2の発生の位置を特定するための手段であって、前記第2の発生は前記成分ストリングの中の前記第1の発生の後である、特定するための手段と、前記成分の第2の発生の位置が特定された場合、前記成分ストリング中の前記成分の前記第1の発生と前記第2発生との間の成分の数を割り出すための手段と、前記成分についての前記成分距離を前記割り出された成分の数に設定するための手段と、をさらに具備する、請求項47の装置。 請求項49 少なくとも1つのプログラム可能処理ユニットが前記複数のグラフィックス処理命令のうちの命令を使用して頂点シェーダを実行し、前記成分の組がX、Y、Z、およびW成分を具備する、請求項48の装置。 請求項50 少なくとも1つのプログラム可能処理ユニットが前記複数のグラフィックス処理命令のうちの命令を使用してフラグメント・シェーダを実行し、前記成分の組がR、G、B、およびA成分を具備する、請求項48の装置。
类似技术:
公开号 | 公开日 | 专利标题 JP6187988B2|2017-08-30|ベクトルコンフリクト命令 US10067797B2|2018-09-04|Application programming interfaces for data parallel computing on multiple processors JP6162215B2|2017-07-12|グラフィックス処理におけるパッチされたシェーディング EP2791910B1|2016-11-09|Graphics processing unit with command processor EP3183713B1|2019-09-18|Render target command reordering in graphics processing JP6309620B2|2018-04-11|頂点シェーダのフロント・エンドとしてコンピュート・シェーダを使用すること US9292414B2|2016-03-22|System, method, and computer program product for debugging graphics programs locally utilizing a system with a single GPU Lindholm et al.2008|NVIDIA Tesla: A unified graphics and computing architecture US7617384B1|2009-11-10|Structured programming control flow using a disable mask in a SIMD architecture US7159212B2|2007-01-02|Systems and methods for implementing shader-driven compilation of rendering assets US20140184634A1|2014-07-03|System for Optimizing Graphics Operations JP5345226B2|2013-11-20|グラフィックスプロセッサの並列アレイアーキテクチャ Kessenich et al.2004|The opengl shading language US7526634B1|2009-04-28|Counter-based delay of dependent thread group execution US8823718B2|2014-09-02|Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques US9142005B2|2015-09-22|Efficient placement of texture barrier instructions US10747519B2|2020-08-18|Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit US9024946B2|2015-05-05|Tessellation shader inter-thread coordination US7847800B2|2010-12-07|System for emulating graphics operations US8612732B2|2013-12-17|Retargetting an application program for execution by a general purpose processor US8321849B2|2012-11-27|Virtual architecture and instruction set for parallel thread computing EP1735701B1|2018-12-05|High-level program interface for graphics operations US7015913B1|2006-03-21|Method and apparatus for multithreaded processing of data in a programmable graphics processor JP5525175B2|2014-06-18|複数のハードウェア・ドメイン、データ・タイプ、およびフォーマットの処理を統合し抽象化するフレームワーク US9720726B2|2017-08-01|Multi-dimensional thread grouping for multiple processors
同族专利:
公开号 | 公开日 KR20100114544A|2010-10-25| TW200947343A|2009-11-16| KR20130005309A|2013-01-15| JP5054203B2|2012-10-24| WO2009105725A2|2009-08-27| CN101946233A|2011-01-12| KR101250152B1|2013-04-04| CA2713649A1|2009-08-27| WO2009105725A3|2010-01-07| CN101946233B|2013-09-11| US8098251B2|2012-01-17| US20090213128A1|2009-08-27| EP2093668A3|2009-12-23| EP2093668A2|2009-08-26|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题 JPH09185508A|1995-12-28|1997-07-15|Fuji Xerox Co Ltd|画像形成装置および画像形成方法| JP2006221639A|2005-02-07|2006-08-24|Sony Computer Entertainment Inc|グラフィック処理を用いた粒子操作方法及び装置| JP2006338616A|2005-06-06|2006-12-14|Matsushita Electric Ind Co Ltd|コンパイラ装置|JP2014235747A|2013-05-31|2014-12-15|アーム・リミテッド|データ処理システム| JPWO2014162589A1|2013-04-05|2017-02-16|Necディスプレイソリューションズ株式会社|電子機器および電子機器の制御方法|US5710912A|1993-05-06|1998-01-20|Hewlett-Packard Co.|Method and apparatus for enabling a computer system to adjust for latency assumptions| US6771264B1|1998-08-20|2004-08-03|Apple Computer, Inc.|Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor| US6762761B2|1999-03-31|2004-07-13|International Business Machines Corporation|Method and system for graphics rendering using hardware-event-triggered execution of captured graphics hardware instructions| US6731294B1|2000-04-21|2004-05-04|Ati International Srl|Vector engine with pre-accumulation buffer and method therefore| US7392516B2|2004-08-05|2008-06-24|International Business Machines Corporation|Method and system for configuring a dependency graph for dynamic by-pass instruction scheduling| US7681187B2|2005-03-31|2010-03-16|Nvidia Corporation|Method and apparatus for register allocation in presence of hardware constraints|US20090282390A1|2008-05-08|2009-11-12|Microsoft Corporation|Parallel Run-Time Rendering Debugger| US8922555B2|2009-10-07|2014-12-30|Nvidia Corporation|Pixel shader output map| JP2011090592A|2009-10-26|2011-05-06|Sony Corp|情報処理装置とその命令デコーダ| US8933944B2|2010-10-13|2015-01-13|Boston Scientific Neuromodulation Corporation|External controller for an implantable medical device with dual microcontrollers for improved graphics rendering| WO2013081596A1|2011-11-30|2013-06-06|Intel Corporation|Efficient implementation of rsa using gpu/cpu architecture| US9122494B2|2013-05-15|2015-09-01|National Tsing Hua University|Method and apparatus for code size reduction| US9727339B2|2013-07-18|2017-08-08|Nvidia Corporation|Method and system for distributed shader optimization| US9389847B2|2014-06-28|2016-07-12|Vmware, Inc.|Selection of relevant software bundles| US9529980B2|2014-06-28|2016-12-27|Vmware, Inc.|Deduplication of end user license agreements| US9389848B2|2014-06-28|2016-07-12|Vmware, Inc.|Scheduling a plan of operations in a datacenter| US9223767B1|2014-06-28|2015-12-29|Vmware, Inc.|Unified graphical user interface for displaying a plan of operations in a datacenter| US9442714B2|2014-06-28|2016-09-13|Vmware, Inc.|Unified visualization of a plan of operations in a datacenter| US9978171B2|2014-07-29|2018-05-22|Nvidia Corporation|Control of a sample mask from a fragment shader program| GB2536964B|2015-04-02|2019-12-25|Ge Aviat Systems Ltd|Avionics display system| US10599428B2|2016-03-23|2020-03-24|Arm Limited|Relaxed execution of overlapping mixed-scalar-vector instructions| US10430912B2|2017-02-14|2019-10-01|Qualcomm Incorporated|Dynamic shader instruction nullification for graphics processing| US10679314B2|2017-03-15|2020-06-09|Microsoft Technology Licensing, Llc|Techniques for reducing perceptible delay in rendering graphics|
法律状态:
2012-02-15| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120214 | 2012-05-08| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120507 | 2012-06-21| TRDD| Decision of grant or rejection written| 2012-06-27| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120626 | 2012-06-28| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 | 2012-08-02| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120726 | 2012-08-03| R150| Certificate of patent or registration of utility model|Ref document number: 5054203 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 | 2012-08-06| FPAY| Renewal fee payment (event date is renewal date of database)|Free format text: PAYMENT UNTIL: 20150803 Year of fee payment: 3 | 2015-08-04| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2016-08-02| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2017-08-08| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2018-08-07| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2019-08-03| LAPS| Cancellation because of no payment of annual fees|
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|